package com.zqweb.gulimall.product.feign.fallback;

import com.zqweb.common.exception.ExpCodeAndMsgEnum;
import com.zqweb.common.utils.R;
import com.zqweb.gulimall.product.feign.SeckillFeignService;
import org.springframework.stereotype.Component;

@Component
/*
    触发熔断回调的情况有：
        1、远程调用的服务出现问题（如：超时、宕机）等造成调用失败后触发
        2、远程调用的服务未出现问题，但是此时处于流量高峰，为了实现高可用/可靠性，牺牲
        一些不必要的远程服务（如在远程服务提供方设置特定降级策略，触发降级、失败）后触发
 */
public class SeckillFeignFallback implements SeckillFeignService {
    @Override
    // 构造商品详情时秒杀服务远程调用失败，秒杀商品信息拿不到的熔断处理
    public R getSeckillSkusInfoBySkuId(Long skuId) {
        System.out.println("远程秒杀服务调用失败，触发熔断方法(保证秒杀时的高并发)...");
        return R.error(ExpCodeAndMsgEnum.REQ_TOOMANY_EXCEPTION.getCode(),ExpCodeAndMsgEnum.REQ_TOOMANY_EXCEPTION.getMsg());
    }
}
